/**
 * 网络请求超时
 * @param ctx 环境上下文
 * @param next 下一步运行
 * @returns {Promise<void>}
 */
module.exports = async function(ctx, next){
  // 设置定时器
  let timer = null;
  // 超时时间
  const timeout = 5000; //设置超时时间
  // 只要有一个完成就返回
  await Promise.race([
    // 超时的 Promise
    new Promise(function(resolve, reject) {
      // 定时器
      timer = setTimeout(function() {
        // 错误对象
        const err = new Error('Request timeout')
        // 错误吗
        err.status = 408
        // 直接返回错误
        reject(err)
      }, timeout);
    }),
    new Promise(function(resolve, reject) {
    //使用一个闭包来执行下面的中间件
      (async function() {
        await next()
        // 清除定定时器
        clearTimeout(timer)
        resolve()
      })()
    })
  ]).then(() => {

  }).catch((err) => {
    throw err
  })
}
